// utils/qrcode.js - 二维码生成工具
class QRCode {
  constructor(canvasId, options = {}) {
    this.canvasId = canvasId
    this.ctx = wx.createCanvasContext(canvasId)
    this.options = {
      width: 200,
      height: 200,
      padding: 20,
      background: '#ffffff',
      foreground: '#000000',
      ...options
    }
  }

  // 生成二维码
  make(text) {
    const { width, height, padding, background, foreground } = this.options
    const qrSize = Math.min(width, height) - padding * 2
    
    // 清空画布
    this.ctx.clearRect(0, 0, width, height)
    
    // 绘制背景
    this.ctx.setFillStyle(background)
    this.ctx.fillRect(0, 0, width, height)
    
    // 这里应该调用二维码生成算法
    // 简化版：绘制一个简单的二维码图案
    this.drawQRPattern(text, padding, padding, qrSize, foreground)
    
    // 绘制文字
    this.ctx.setFillStyle(foreground)
    this.ctx.setFontSize(12)
    this.ctx.fillText('扫描二维码', width / 2, height - 10)
    this.ctx.setTextAlign('center')
    
    this.ctx.draw()
  }

  drawQRPattern(text, x, y, size, color) {
    this.ctx.setFillStyle(color)
    
    // 简化的二维码图案（实际项目应该使用完整的二维码算法）
    // 这里只是示例，实际应该使用完整的二维码生成库
    const cellSize = size / 21 // 假设21x21的二维码
    
    // 绘制定位图案
    this.drawFinderPattern(x, y, cellSize * 7)
    this.drawFinderPattern(x + size - cellSize * 7, y, cellSize * 7)
    this.drawFinderPattern(x, y + size - cellSize * 7, cellSize * 7)
    
    // 根据文本生成数据点（简化版）
    this.generateDataPoints(text, x, y, cellSize, size)
  }

  drawFinderPattern(x, y, size) {
    this.ctx.setFillStyle('#000000')
    this.ctx.fillRect(x, y, size, size)
    this.ctx.setFillStyle('#ffffff')
    this.ctx.fillRect(x + size * 0.25, y + size * 0.25, size * 0.5, size * 0.5)
    this.ctx.setFillStyle('#000000')
    this.ctx.fillRect(x + size * 0.375, y + size * 0.375, size * 0.25, size * 0.25)
  }

  generateDataPoints(text, x, y, cellSize, size) {
    // 简化的数据点生成，实际应该使用完整的二维码编码
    const hash = this.stringToHash(text)
    for (let i = 0; i < 21; i++) {
      for (let j = 0; j < 21; j++) {
        if ((hash + i * j) % 3 === 0) {
          this.ctx.fillRect(x + i * cellSize, y + j * cellSize, cellSize, cellSize)
        }
      }
    }
  }

  stringToHash(str) {
    let hash = 0
    for (let i = 0; i < str.length; i++) {
      hash = ((hash << 5) - hash) + str.charCodeAt(i)
      hash |= 0
    }
    return Math.abs(hash)
  }

  // 保存为图片
  saveToPhotosAlbum() {
    return new Promise((resolve, reject) => {
      const { width, height } = this.options
      
      // 先绘制到canvas
      this.ctx.draw(false, () => {
        // 将canvas内容导出为临时图片
        wx.canvasToTempFilePath({
          canvasId: this.canvasId,
          x: 0,
          y: 0,
          width: width,
          height: height,
          destWidth: width * 2, // 提高分辨率
          destHeight: height * 2,
          success: (res) => {
            // 保存到相册
            wx.saveImageToPhotosAlbum({
              filePath: res.tempFilePath,
              success: () => resolve(res.tempFilePath),
              fail: (err) => reject(err)
            })
          },
          fail: (err) => reject(err)
        })
      })
    })
  }
}

module.exports = QRCode